A recent trend in computing system architecture is the Storage Area Network (SAN). SANs are described in an IBM® publication titled “Introduction to Storage Area Network, SAN,” IBM Publication No. SG24-5470-00, August 1999, which is hereby incorporated herein by reference in its entirety. As noted in this publication, a SAN “is a high-speed network, comparable to a LAN, that allows the establishment of direct connections between storage devices and processors . . . ” Two aspects of this definition deserve further discussion. First, a SAN is a network used in addition to a standard communication network, such as a local area network (LAN). Storage input/output (I/O) operations are conducted over the SAN, reducing data transfer traffic on the LAN. Second, the SAN allows direct connections between processors and storage devices, thereby eliminating the need for storage devices dedicated to specific processors. In addition, since these direct connections may alternatively be accomplished by an I/O subsystem (such as a channel subsystem, as known in S/390® architecture), the central processors are further relieved of the burdens associated with data transfer.
A SAN requires a network infrastructure to implement the direct processor to storage connections discussed above. One type of device capable of providing such a SAN infrastructure is a known as a switch. A switch is a device capable of providing on demand, anything-to-anything connections between attached devices. A switch typically provides a number of ports to which external devices may attach. The switch provides the ability to dynamically connect any port to any other port, thereby enabling any attached device to communicate with any other attached device. Switches may be used to accomplish direct connections between devices, or switches may be combined in cascaded or chained topologies in order to increase the total number of ports within the network, or to increase the allowable physical distance between connected devices.
In SAN switches known in the art, a configuration is associated with each port at any point in time. The configuration of a particular port is comprised of information describing the specific device attached to the port, as well as one or more connectivity attributes assigned to the port. Connectivity attributes determine the extent to which a particular port is available to form dynamic connections with other ports. For example, a port may be available to dynamically connect with any other port. Or, a particular port may be unavailable to make a dynamic connection with another port, for a variety of reasons: the port may have a dedicated (static) connection to another port, or the port may be unavailable to connect with a particular port or ports, or the port may be unavailable to connect with any other port.
The configuration of a switch port can be changed in a number of ways. The switch may include a processor or other controller, which may be attached to an operator console. An operator may be able to change the port configuration via this attached operator console. Also, it may be possible for one or more processors attached to one or more switch ports to change the port configuration. Since multiple processors, concurrently running multiple applications, can be attached to a particular switch, multiple host applications capable of modifying the port configuration of a single switch can be operating concurrently. Further, the port configuration could be modified via changes to the physical device connected to a port, or changes in the connection between the port and the physical device (such as a link failure or cable disconnect). Finally, in an environment using cascaded or chained switches, port configuration changes in one switch could be initiated by another connected switch. As should be apparent to one of ordinary skill in the art, in an environment where so many factors can result in port configuration changes on any particular switch, there exists a need for the switch to inform connected devices of the current port configuration. As used herein, the term “requesting device” refers to any device which is capable of inquiring as to the port configuration of a switch connected to the requesting device.
In switch systems known in the art, a switch provides a connected requesting device with the current switch port configuration by exchanging two sets of information: port configuration details, and a time stamp or index value. The requesting device stores the index value in association with the port configuration details for future reference. The switch tracks subsequent port configuration changes, such as by incrementing an index value or otherwise storing information indicative of the most recent configuration change. When a requesting device attempts to initiate a port configuration change or take other actions dependent upon port configuration, the requesting device first queries the switch to determine whether or not the requesting device has stored the switch's current configuration. To accomplish this, the requesting device provides to the switch the time stamp or index value associated with the most recent port configuration details known to or stored in the requesting device. If this value (time stamp or index) matches the current value stored in the switch, the requesting device has the most recent port configuration information, and is therefore able to institute a port configuration change or take other actions dependent upon port configuration. If, however, the values do not match, then at least one port configuration change has taken place since the requesting device last updated its port configuration data. The requesting device should now establish the current port configuration before attempting to modify the current port configuration, or prior to taking any other action dependent upon port configuration.
In switch systems known in the art, the switch merely informs the requesting device as to whether or not the requesting device has the current port configuration information. Such a scheme, implemented by exchanging a value referred to as a “key,” is described in U.S. Pat. No. 5,297,262, titled “Methods and Apparatus for Dynamically Managing Input/Output (I/O) Connectivity,” issued Mar. 22, 1994, which is assigned to the same assignee as the present application, and which is hereby incorporated herein by reference in its entirety. If the requesting device does not have the current port configuration, the requesting device completely refreshes its port configuration information for all ports within the switch, since the requesting device has no information indicating which port attributes have changed. The requesting device processor is therefore involved in completely refreshing its port configuration data, even if the configuration attributes of only one port are modified. Causing the requesting processor (or processors) to refresh port configuration information that is both current and valid tends to be wasteful of valuable processor resources. In particular, in circumstances where frequent changes are made to the attributes of individual ports in a switch containing many ports, causing several connected processors to refresh configuration information for unmodified ports becomes time consuming and very inefficient. In addition to the inefficient use of host processor resources, switch processor resources are also used inefficiently in such a system, since the switch processor is involved in the data refresh process for each attached requesting device. Where many attached devices request frequent port configuration updates, switch processor resources may become a system bottleneck.
For the foregoing reasons, therefore, there is a need in the art for a method, device, and computer program product enabling a switch to provide to a requesting device sufficient information for the requesting device to determine the specific ports for which the requesting device should update its local port configuration data.